package com.ruoyi.project.storage.service.impl;

import com.ruoyi.common.exception.CustomException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.project.common.util.ParameterUtil;
import com.ruoyi.project.common.util.SeqGeneratorUtil;
import com.ruoyi.project.storage.domain.vo.BoxInfoVO;
import com.ruoyi.project.storage.mapper.BoxInfoMapper;
import com.ruoyi.project.storage.service.IBoxInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 请添加注释
 *
 * @author mengyuanqing
 * @date 2020/5/8
 */
@Service
public class BoxInfoServiceImpl implements IBoxInfoService {
    // 通过注释注入
    @Autowired
    private BoxInfoMapper boxInfoMapper;

    /**
     * 箱子信息查询
     *
     * @param boxInfoVO 对象
     * @return 分页结果
     */
    @Override
    public List<BoxInfoVO> selectBoxInfoList(BoxInfoVO boxInfoVO) {
        // 返回结果
        return boxInfoMapper.selectBoxInfoList(boxInfoVO);
    }

    /**
     * 箱子信息新增
     *
     * @param boxInfoVO 对象
     * @return 结果
     */
    @Override
    public int insertBoxInfo(BoxInfoVO boxInfoVO) {
        // 查询当前箱子信息下有没有前端传过来的规格和每月积分单价
        BoxInfoVO boxInfoVO1 = boxInfoMapper.selectBoxStandard(boxInfoVO);
        // 通过箱子规格表查询新增的箱子信息中箱子规格是否存在于箱子规格表中
        if (boxInfoVO.getBoxStandard()!=null&& !boxInfoVO.getBoxStandard().equals("") &&
                boxInfoVO.getBoxUnitPrice()!=null&& boxInfoVO1!=null) {
            // 设置基础字段
            ParameterUtil.setCreateEntity(boxInfoVO);
            // 设置箱子编号年月日+六位序列，因此要转换类型
            boxInfoVO.setBoxCode(Long.valueOf(SeqGeneratorUtil.seqGenerator(DateUtils.getNowDateStr(), 6)));
            // 设置未使用
            boxInfoVO.setIsUsed(0);
            // 新增箱子信息
            return boxInfoMapper.insertBoxInfo(boxInfoVO);
        } else {
            // 抛出异常
            throw new CustomException("箱子规格不存在或箱子积分输入有误请重新输入");
        }
    }

    /**
     * 箱子信息批量删除
     *
     * @param ids 箱子id
     * @return 结果
     */
    @Override
    public int deleteBoxInfoByIds(Long[] ids) {
        // 如果订单表中还存在箱子id则无法删除
        if(boxInfoMapper.selectOrderCountByIds(ids)>0){
            // 抛出异常
            throw new CustomException("删除箱子信息失败，仍有订单使用");
        }
        // 返回结果
        return boxInfoMapper.deleteBoxInfoByIds(ParameterUtil.getBatchUpdateMapByIds(ids));
    }
}
